/* -*- c++ -*- */
/*
 * Copyright 2018 Ahmet Inan, Ron Economos.
 *
 * This file is part of gr-dvbs2rx.
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 */

/*
 * DVB-S2 LDPC parity bit address tables
 *
 * Entries below copied from:
 * https://www.dvb.org/resources/public/standards/a83-1_dvb-s2_den302307v141.pdf
 *
 */

#ifndef DVB_S2_TABLES_HH
#define DVB_S2_TABLES_HH

struct DVB_S2_TABLE_B1 {
    static const int M = 360;
    static const int N = 64800;
    static const int K = 16200;
    static const int LINKS_MIN_CN = 3;
    static const int LINKS_MAX_CN = 4;
    static const int LINKS_TOTAL = 194399;
    static const int DEG_MAX = 12;
    static constexpr int DEG[] = { 12, 3, 0 };
    static constexpr int LEN[] = { 15, 30, 0 };
    static constexpr int POS[] = {
        23606, 36098, 1140,  28859, 18148, 18510, 6226,  540,   42014, 20879, 23802,
        47088, 16419, 24928, 16609, 17248, 7693,  24997, 42587, 16858, 34921, 21042,
        37024, 20692, 1874,  40094, 18704, 14474, 14004, 11519, 13106, 28826, 38669,
        22363, 30255, 31105, 22254, 40564, 22645, 22532, 6134,  9176,  39998, 23892,
        8937,  15608, 16854, 31009, 8037,  40401, 13550, 19526, 41902, 28782, 13304,
        32796, 24679, 27140, 45980, 10021, 40540, 44498, 13911, 22435, 32701, 18405,
        39929, 25521, 12497, 9851,  39223, 34823, 15233, 45333, 5041,  44979, 45710,
        42150, 19416, 1892,  23121, 15860, 8832,  10308, 10468, 44296, 3611,  1480,
        37581, 32254, 13817, 6883,  32892, 40258, 46538, 11940, 6705,  21634, 28150,
        43757, 895,   6547,  20970, 28914, 30117, 25736, 41734, 11392, 22002, 5739,
        27210, 27828, 34192, 37992, 10915, 6998,  3824,  42130, 4494,  35739, 8515,
        1191,  13642, 30950, 25943, 12673, 16726, 34261, 31828, 3340,  8747,  39225,
        18979, 17058, 43130, 4246,  4793,  44030, 19454, 29511, 47929, 15174, 24333,
        19354, 16694, 8381,  29642, 46516, 32224, 26344, 9405,  18292, 12437, 27316,
        35466, 41992, 15642, 5871,  46489, 26723, 23396, 7257,  8974,  3156,  37420,
        44823, 35423, 13541, 42858, 32008, 41282, 38773, 26570, 2702,  27260, 46974,
        1469,  20887, 27426, 38553, 22152, 24261, 8297,  19347, 9978,  27802, 34991,
        6354,  33561, 29782, 30875, 29523, 9278,  48512, 14349, 38061, 4165,  43878,
        8548,  33172, 34410, 22535, 28811, 23950, 20439, 4027,  24186, 38618, 8187,
        30947, 35538, 43880, 21459, 7091,  45616, 15063, 5505,  9315,  21908, 36046,
        32914, 11836, 7304,  39782, 33721, 16905, 29962, 12980, 11171, 23709, 22460,
        34541, 9937,  44500, 14035, 47316, 8815,  15057, 45482, 24461, 30518, 36877,
        879,   7583,  13364, 24332, 448,   27056, 4682,  12083, 31378, 21670, 1159,
        18031, 2221,  17028, 38715, 9350,  17343, 24530, 29574, 46128, 31039, 32818,
        20373, 36967, 18345, 46685, 20622, 32806,
    };
};

struct DVB_S2_TABLE_B2 {
    static const int M = 360;
    static const int N = 64800;
    static const int K = 21600;
    static const int LINKS_MIN_CN = 4;
    static const int LINKS_MAX_CN = 5;
    static const int LINKS_TOTAL = 215999;
    static const int DEG_MAX = 12;
    static constexpr int DEG[] = { 12, 3, 0 };
    static constexpr int LEN[] = { 20, 40, 0 };
    static constexpr int POS[] = {
        34903, 20927, 32093, 1052,  25611, 16093, 16454, 5520,  506,   37399, 18518,
        21120, 11636, 14594, 22158, 14763, 15333, 6838,  22222, 37856, 14985, 31041,
        18704, 32910, 17449, 1665,  35639, 16624, 12867, 12449, 10241, 11650, 25622,
        34372, 19878, 26894, 29235, 19780, 36056, 20129, 20029, 5457,  8157,  35554,
        21237, 7943,  13873, 14980, 9912,  7143,  35911, 12043, 17360, 37253, 25588,
        11827, 29152, 21936, 24125, 40870, 40701, 36035, 39556, 12366, 19946, 29072,
        16365, 35495, 22686, 11106, 8756,  34863, 19165, 15702, 13536, 40238, 4465,
        40034, 40590, 37540, 17162, 1712,  20577, 14138, 31338, 19342, 9301,  39375,
        3211,  1316,  33409, 28670, 12282, 6118,  29236, 35787, 11504, 30506, 19558,
        5100,  24188, 24738, 30397, 33775, 9699,  6215,  3397,  37451, 34689, 23126,
        7571,  1058,  12127, 27518, 23064, 11265, 14867, 30451, 28289, 2966,  11660,
        15334, 16867, 15160, 38343, 3778,  4265,  39139, 17293, 26229, 42604, 13486,
        31497, 1365,  14828, 7453,  26350, 41346, 28643, 23421, 8354,  16255, 11055,
        24279, 15687, 12467, 13906, 5215,  41328, 23755, 20800, 6447,  7970,  2803,
        33262, 39843, 5363,  22469, 38091, 28457, 36696, 34471, 23619, 2404,  24229,
        41754, 1297,  18563, 3673,  39070, 14480, 30279, 37483, 7580,  29519, 30519,
        39831, 20252, 18132, 20010, 34386, 7252,  27526, 12950, 6875,  43020, 31566,
        39069, 18985, 15541, 40020, 16715, 1721,  37332, 39953, 17430, 32134, 29162,
        10490, 12971, 28581, 29331, 6489,  35383, 736,   7022,  42349, 8783,  6767,
        11871, 21675, 10325, 11548, 25978, 431,   24085, 1925,  10602, 28585, 12170,
        15156, 34404, 8351,  13273, 20208, 5800,  15367, 21764, 16279, 37832, 34792,
        21250, 34192, 7406,  41488, 18346, 29227, 26127, 25493, 7048,  39948, 28229,
        24899, 17408, 14274, 38993, 38774, 15968, 28459, 41404, 27249, 27425, 41229,
        6082,  43114, 13957, 4979,  40654, 3093,  3438,  34992, 34082, 6172,  28760,
        42210, 34141, 41021, 14705, 17783, 10134, 41755, 39884, 22773, 14615, 15593,
        1642,  29111, 37061, 39860, 9579,  33552, 633,   12951, 21137, 39608, 38244,
        27361, 29417, 2939,  10172, 36479, 29094, 5357,  19224, 9562,  24436, 28637,
        40177, 2326,  13504, 6834,  21583, 42516, 40651, 42810, 25709, 31557, 32138,
        38142, 18624, 41867, 39296, 37560, 14295, 16245, 6821,  21679, 31570, 25339,
        25083, 22081, 8047,  697,   35268, 9884,  17073, 19995, 26848, 35245, 8390,
        18658, 16134, 14807, 12201, 32944, 5035,  25236, 1216,  38986, 42994, 24782,
        8681,  28321, 4932,  34249, 4107,  29382, 32124, 22157, 2624,  14468, 38788,
        27081, 7936,  4368,  26148, 10578, 25353, 4122,  39751,
    };
};

struct DVB_S2_TABLE_B3 {
    static const int M = 360;
    static const int N = 64800;
    static const int K = 25920;
    static const int LINKS_MIN_CN = 5;
    static const int LINKS_MAX_CN = 6;
    static const int LINKS_TOTAL = 233279;
    static const int DEG_MAX = 12;
    static constexpr int DEG[] = { 12, 3, 0 };
    static constexpr int LEN[] = { 24, 48, 0 };
    static constexpr int POS[] = {
        31413, 18834, 28884, 947,   23050, 14484, 14809, 4968,  455,   33659, 16666,
        19008, 13172, 19939, 13354, 13719, 6132,  20086, 34040, 13442, 27958, 16813,
        29619, 16553, 1499,  32075, 14962, 11578, 11204, 9217,  10485, 23062, 30936,
        17892, 24204, 24885, 32490, 18086, 18007, 4957,  7285,  32073, 19038, 7152,
        12486, 13483, 24808, 21759, 32321, 10839, 15620, 33521, 23030, 10646, 26236,
        19744, 21713, 36784, 8016,  12869, 35597, 11129, 17948, 26160, 14729, 31943,
        20416, 10000, 7882,  31380, 27858, 33356, 14125, 12131, 36199, 4058,  35992,
        36594, 33698, 15475, 1566,  18498, 12725, 7067,  17406, 8372,  35437, 2888,
        1184,  30068, 25802, 11056, 5507,  26313, 32205, 37232, 15254, 5365,  17308,
        22519, 35009, 718,   5240,  16778, 23131, 24092, 20587, 33385, 27455, 17602,
        4590,  21767, 22266, 27357, 30400, 8732,  5596,  3060,  33703, 3596,  6882,
        873,   10997, 24738, 20770, 10067, 13379, 27409, 25463, 2673,  6998,  31378,
        15181, 13645, 34501, 3393,  3840,  35227, 15562, 23615, 38342, 12139, 19471,
        15483, 13350, 6707,  23709, 37204, 25778, 21082, 7511,  14588, 10010, 21854,
        28375, 33591, 12514, 4695,  37190, 21379, 18723, 5802,  7182,  2529,  29936,
        35860, 28338, 10835, 34283, 25610, 33026, 31017, 21259, 2165,  21807, 37578,
        1175,  16710, 21939, 30841, 27292, 33730, 6836,  26476, 27539, 35784, 18245,
        16394, 17939, 23094, 19216, 17432, 11655, 6183,  38708, 28408, 35157, 17089,
        13998, 36029, 15052, 16617, 5638,  36464, 15693, 28923, 26245, 9432,  11675,
        25720, 26405, 5838,  31851, 26898, 8090,  37037, 24418, 27583, 7959,  35562,
        37771, 17784, 11382, 11156, 37855, 7073,  21685, 34515, 10977, 13633, 30969,
        7516,  11943, 18199, 5231,  13825, 19589, 23661, 11150, 35602, 19124, 30774,
        6670,  37344, 16510, 26317, 23518, 22957, 6348,  34069, 8845,  20175, 34985,
        14441, 25668, 4116,  3019,  21049, 37308, 24551, 24727, 20104, 24850, 12114,
        38187, 28527, 13108, 13985, 1425,  21477, 30807, 8613,  26241, 33368, 35913,
        32477, 5903,  34390, 24641, 26556, 23007, 27305, 38247, 2621,  9122,  32806,
        21554, 18685, 17287, 27292, 19033, 25796, 31795, 12152, 12184, 35088, 31226,
        38263, 33386, 24892, 23114, 37995, 29796, 34336, 10551, 36245, 35407, 175,
        7203,  14654, 38201, 22605, 28404, 6595,  1018,  19932, 3524,  29305, 31749,
        20247, 8128,  18026, 36357, 26735, 7543,  29767, 13588, 13333, 25965, 8463,
        14504, 36796, 19710, 4528,  25299, 7318,  35091, 25550, 14798, 7824,  215,
        1248,  30848, 5362,  17291, 28932, 30249, 27073, 13062, 2103,  16206, 7129,
        32062, 19612, 9512,  21936, 38833, 35849, 33754, 23450, 18705, 28656, 18111,
        22749, 27456, 32187, 28229, 31684, 30160, 15293, 8483,  28002, 14880, 13334,
        12584, 28646, 2558,  19687, 6259,  4499,  26336, 11952, 28386, 8405,  10609,
        961,   7582,  10423, 13191, 26818, 15922, 36654, 21450, 10492, 1532,  1205,
        30551, 36482, 22153, 5156,  11330, 34243, 28616, 35369, 13322, 8962,  1485,
        21186, 23541, 17445, 35561, 33133, 11593, 19895, 33917, 7863,  33651, 20063,
        28331, 10702, 13195, 21107, 21859, 4364,  31137, 4804,  5585,  2037,  4830,
        30672, 16927, 14800,
    };
};

struct DVB_S2_TABLE_B4 {
    static const int M = 360;
    static const int N = 64800;
    static const int K = 32400;
    static const int LINKS_MIN_CN = 6;
    static const int LINKS_MAX_CN = 7;
    static const int LINKS_TOTAL = 226799;
    static const int DEG_MAX = 8;
    static constexpr int DEG[] = { 8, 3, 0 };
    static constexpr int LEN[] = { 36, 54, 0 };
    static constexpr int POS[] = {
        54,    9318,  14392, 27561, 26909, 10219, 2534,  8597,  55,    7263,  4635,
        2530,  28130, 3033,  23830, 3651,  56,    24731, 23583, 26036, 17299, 5750,
        792,   9169,  57,    5811,  26154, 18653, 11551, 15447, 13685, 16264, 58,
        12610, 11347, 28768, 2792,  3174,  29371, 12997, 59,    16789, 16018, 21449,
        6165,  21202, 15850, 3186,  60,    31016, 21449, 17618, 6213,  12166, 8334,
        18212, 61,    22836, 14213, 11327, 5896,  718,   11727, 9308,  62,    2091,
        24941, 29966, 23634, 9013,  15587, 5444,  63,    22207, 3983,  16904, 28534,
        21415, 27524, 25912, 64,    25687, 4501,  22193, 14665, 14798, 16158, 5491,
        65,    4520,  17094, 23397, 4264,  22370, 16941, 21526, 66,    10490, 6182,
        32370, 9597,  30841, 25954, 2762,  67,    22120, 22865, 29870, 15147, 13668,
        14955, 19235, 68,    6689,  18408, 18346, 9918,  25746, 5443,  20645, 69,
        29982, 12529, 13858, 4746,  30370, 10023, 24828, 70,    1262,  28032, 29888,
        13063, 24033, 21951, 7863,  71,    6594,  29642, 31451, 14831, 9509,  9335,
        31552, 72,    1358,  6454,  16633, 20354, 24598, 624,   5265,  73,    19529,
        295,   18011, 3080,  13364, 8032,  15323, 74,    11981, 1510,  7960,  21462,
        9129,  11370, 25741, 75,    9276,  29656, 4543,  30699, 20646, 21921, 28050,
        76,    15975, 25634, 5520,  31119, 13715, 21949, 19605, 77,    18688, 4608,
        31755, 30165, 13103, 10706, 29224, 78,    21514, 23117, 12245, 26035, 31656,
        25631, 30699, 79,    9674,  24966, 31285, 29908, 17042, 24588, 31857, 80,
        21856, 27777, 29919, 27000, 14897, 11409, 7122,  81,    29773, 23310, 263,
        4877,  28622, 20545, 22092, 82,    15605, 5651,  21864, 3967,  14419, 22757,
        15896, 83,    30145, 1759,  10139, 29223, 26086, 10556, 5098,  84,    18815,
        16575, 2936,  24457, 26738, 6030,  505,   85,    30326, 22298, 27562, 20131,
        26390, 6247,  24791, 86,    928,   29246, 21246, 12400, 15311, 32309, 18608,
        87,    20314, 6025,  26689, 16302, 2296,  3244,  19613, 88,    6237,  11943,
        22851, 15642, 23857, 15112, 20947, 89,    26403, 25168, 19038, 18384, 8882,
        12719, 7093,  0,     14567, 24965, 1,     3908,  100,   2,     10279, 240,
        3,     24102, 764,   4,     12383, 4173,  5,     13861, 15918, 6,     21327,
        1046,  7,     5288,  14579, 8,     28158, 8069,  9,     16583, 11098, 10,
        16681, 28363, 11,    13980, 24725, 12,    32169, 17989, 13,    10907, 2767,
        14,    21557, 3818,  15,    26676, 12422, 16,    7676,  8754,  17,    14905,
        20232, 18,    15719, 24646, 19,    31942, 8589,  20,    19978, 27197, 21,
        27060, 15071, 22,    6071,  26649, 23,    10393, 11176, 24,    9597,  13370,
        25,    7081,  17677, 26,    1433,  19513, 27,    26925, 9014,  28,    19202,
        8900,  29,    18152, 30647, 30,    20803, 1737,  31,    11804, 25221, 32,
        31683, 17783, 33,    29694, 9345,  34,    12280, 26611, 35,    6526,  26122,
        36,    26165, 11241, 37,    7666,  26962, 38,    16290, 8480,  39,    11774,
        10120, 40,    30051, 30426, 41,    1335,  15424, 42,    6865,  17742, 43,
        31779, 12489, 44,    32120, 21001, 45,    14508, 6996,  46,    979,   25024,
        47,    4554,  21896, 48,    7989,  21777, 49,    4972,  20661, 50,    6612,
        2730,  51,    12742, 4418,  52,    29194, 595,   53,    19267, 20113,
    };
};

struct DVB_S2_TABLE_B5 {
    static const int M = 360;
    static const int N = 64800;
    static const int K = 38880;
    static const int LINKS_MIN_CN = 10;
    static const int LINKS_MAX_CN = 11;
    static const int LINKS_TOTAL = 285119;
    static const int DEG_MAX = 12;
    static constexpr int DEG[] = { 12, 3, 0 };
    static constexpr int LEN[] = { 36, 72, 0 };
    static constexpr int POS[] = {
        22422, 10282, 11626, 19997, 11161, 2922,  3122,  99,    5625,  17064, 8270,
        179,   25087, 16218, 17015, 828,   20041, 25656, 4186,  11629, 22599, 17305,
        22515, 6463,  11049, 22853, 25706, 14388, 5500,  19245, 8732,  2177,  13555,
        11346, 17265, 3069,  16581, 22225, 12563, 19717, 23577, 11555, 25496, 6853,
        25403, 5218,  15925, 21766, 16529, 14487, 7643,  10715, 17442, 11119, 5679,
        14155, 24213, 21000, 1116,  15620, 5340,  8636,  16693, 1434,  5635,  6516,
        9482,  20189, 1066,  15013, 25361, 14243, 18506, 22236, 20912, 8952,  5421,
        15691, 6126,  21595, 500,   6904,  13059, 6802,  8433,  4694,  5524,  14216,
        3685,  19721, 25420, 9937,  23813, 9047,  25651, 16826, 21500, 24814, 6344,
        17382, 7064,  13929, 4004,  16552, 12818, 8720,  5286,  2206,  22517, 2429,
        19065, 2921,  21611, 1873,  7507,  5661,  23006, 23128, 20543, 19777, 1770,
        4636,  20900, 14931, 9247,  12340, 11008, 12966, 4471,  2731,  16445, 791,
        6635,  14556, 18865, 22421, 22124, 12697, 9803,  25485, 7744,  18254, 11313,
        9004,  19982, 23963, 18912, 7206,  12500, 4382,  20067, 6177,  21007, 1195,
        23547, 24837, 756,   11158, 14646, 20534, 3647,  17728, 11676, 11843, 12937,
        4402,  8261,  22944, 9306,  24009, 10012, 11081, 3746,  24325, 8060,  19826,
        842,   8836,  2898,  5019,  7575,  7455,  25244, 4736,  14400, 22981, 5543,
        8006,  24203, 13053, 1120,  5128,  3482,  9270,  13059, 15825, 7453,  23747,
        3656,  24585, 16542, 17507, 22462, 14670, 15627, 15290, 4198,  22748, 5842,
        13395, 23918, 16985, 14929, 3726,  25350, 24157, 24896, 16365, 16423, 13461,
        16615, 8107,  24741, 3604,  25904, 8716,  9604,  20365, 3729,  17245, 18448,
        9862,  20831, 25326, 20517, 24618, 13282, 5099,  14183, 8804,  16455, 17646,
        15376, 18194, 25528, 1777,  6066,  21855, 14372, 12517, 4488,  17490, 1400,
        8135,  23375, 20879, 8476,  4084,  12936, 25536, 22309, 16582, 6402,  24360,
        25119, 23586, 128,   4761,  10443, 22536, 8607,  9752,  25446, 15053, 1856,
        4040,  377,   21160, 13474, 5451,  17170, 5938,  10256, 11972, 24210, 17833,
        22047, 16108, 13075, 9648,  24546, 13150, 23867, 7309,  19798, 2988,  16858,
        4825,  23950, 15125, 20526, 3553,  11525, 23366, 2452,  17626, 19265, 20172,
        18060, 24593, 13255, 1552,  18839, 21132, 20119, 15214, 14705, 7096,  10174,
        5663,  18651, 19700, 12524, 14033, 4127,  2971,  17499, 16287, 22368, 21463,
        7943,  18880, 5567,  8047,  23363, 6797,  10651, 24471, 14325, 4081,  7258,
        4949,  7044,  1078,  797,   22910, 20474, 4318,  21374, 13231, 22985, 5056,
        3821,  23718, 14178, 9978,  19030, 23594, 8895,  25358, 6199,  22056, 7749,
        13310, 3999,  23697, 16445, 22636, 5225,  22437, 24153, 9442,  7978,  12177,
        2893,  20778, 3175,  8645,  11863, 24623, 10311, 25767, 17057, 3691,  20473,
        11294, 9914,  22815, 2574,  8439,  3699,  5431,  24840, 21908, 16088, 18244,
        8208,  5755,  19059, 8541,  24924, 6454,  11234, 10492, 16406, 10831, 11436,
        9649,  16264, 11275, 24953, 2347,  12667, 19190, 7257,  7174,  24819, 2938,
        2522,  11749, 3627,  5969,  13862, 1538,  23176, 6353,  2855,  17720, 2472,
        7428,  573,   15036, 0,     18539, 18661, 1,     10502, 3002,  2,     9368,
        10761, 3,     12299, 7828,  4,     15048, 13362, 5,     18444, 24640, 6,
        20775, 19175, 7,     18970, 10971, 8,     5329,  19982, 9,     11296, 18655,
        10,    15046, 20659, 11,    7300,  22140, 12,    22029, 14477, 13,    11129,
        742,   14,    13254, 13813, 15,    19234, 13273, 16,    6079,  21122, 17,
        22782, 5828,  18,    19775, 4247,  19,    1660,  19413, 20,    4403,  3649,
        21,    13371, 25851, 22,    22770, 21784, 23,    10757, 14131, 24,    16071,
        21617, 25,    6393,  3725,  26,    597,   19968, 27,    5743,  8084,  28,
        6770,  9548,  29,    4285,  17542, 30,    13568, 22599, 31,    1786,  4617,
        32,    23238, 11648, 33,    19627, 2030,  34,    13601, 13458, 35,    13740,
        17328, 36,    25012, 13944, 37,    22513, 6687,  38,    4934,  12587, 39,
        21197, 5133,  40,    22705, 6938,  41,    7534,  24633, 42,    24400, 12797,
        43,    21911, 25712, 44,    12039, 1140,  45,    24306, 1021,  46,    14012,
        20747, 47,    11265, 15219, 48,    4670,  15531, 49,    9417,  14359, 50,
        2415,  6504,  51,    24964, 24690, 52,    14443, 8816,  53,    6926,  1291,
        54,    6209,  20806, 55,    13915, 4079,  56,    24410, 13196, 57,    13505,
        6117,  58,    9869,  8220,  59,    1570,  6044,  60,    25780, 17387, 61,
        20671, 24913, 62,    24558, 20591, 63,    12402, 3702,  64,    8314,  1357,
        65,    20071, 14616, 66,    17014, 3688,  67,    19837, 946,   68,    15195,
        12136, 69,    7758,  22808, 70,    3564,  2925,  71,    3434,  7769,
    };
};

struct DVB_S2_TABLE_B6 {
    static const int M = 360;
    static const int N = 64800;
    static const int K = 43200;
    static const int LINKS_MIN_CN = 9;
    static const int LINKS_MAX_CN = 10;
    static const int LINKS_TOTAL = 215999;
    static const int DEG_MAX = 13;
    static constexpr int DEG[] = { 13, 3, 0 };
    static constexpr int LEN[] = { 12, 108, 0 };
    static constexpr int POS[] = {
        0,     10491, 16043, 506,   12826, 8065,  8226,  2767,  240,   18673, 9279,
        10579, 20928, 1,     17819, 8313,  6433,  6224,  5120,  5824,  12812, 17187,
        9940,  13447, 13825, 18483, 2,     17957, 6024,  8681,  18628, 12794, 5915,
        14576, 10970, 12064, 20437, 4455,  7151,  3,     19777, 6183,  9972,  14536,
        8182,  17749, 11341, 5556,  4379,  17434, 15477, 18532, 4,     4651,  19689,
        1608,  659,   16707, 14335, 6143,  3058,  14618, 17894, 20684, 5306,  5,
        9778,  2552,  12096, 12369, 15198, 16890, 4851,  3109,  1700,  18725, 1997,
        15882, 6,     486,   6111,  13743, 11537, 5591,  7433,  15227, 14145, 1483,
        3887,  17431, 12430, 7,     20647, 14311, 11734, 4180,  8110,  5525,  12141,
        15761, 18661, 18441, 10569, 8192,  8,     3791,  14759, 15264, 19918, 10132,
        9062,  10010, 12786, 10675, 9682,  19246, 5454,  9,     19525, 9485,  7777,
        19999, 8378,  9209,  3163,  20232, 6690,  16518, 716,   7353,  10,    4588,
        6709,  20202, 10905, 915,   4317,  11073, 13576, 16433, 368,   3508,  21171,
        11,    14072, 4033,  19959, 12608, 631,   19494, 14160, 8249,  10223, 21504,
        12395, 4322,  12,    13800, 14161, 13,    2948,  9647,  14,    14693, 16027,
        15,    20506, 11082, 16,    1143,  9020,  17,    13501, 4014,  18,    1548,
        2190,  19,    12216, 21556, 20,    2095,  19897, 21,    4189,  7958,  22,
        15940, 10048, 23,    515,   12614, 24,    8501,  8450,  25,    17595, 16784,
        26,    5913,  8495,  27,    16394, 10423, 28,    7409,  6981,  29,    6678,
        15939, 30,    20344, 12987, 31,    2510,  14588, 32,    17918, 6655,  33,
        6703,  19451, 34,    496,   4217,  35,    7290,  5766,  36,    10521, 8925,
        37,    20379, 11905, 38,    4090,  5838,  39,    19082, 17040, 40,    20233,
        12352, 41,    19365, 19546, 42,    6249,  19030, 43,    11037, 19193, 44,
        19760, 11772, 45,    19644, 7428,  46,    16076, 3521,  47,    11779, 21062,
        48,    13062, 9682,  49,    8934,  5217,  50,    11087, 3319,  51,    18892,
        4356,  52,    7894,  3898,  53,    5963,  4360,  54,    7346,  11726, 55,
        5182,  5609,  56,    2412,  17295, 57,    9845,  20494, 58,    6687,  1864,
        59,    20564, 5216,  0,     18226, 17207, 1,     9380,  8266,  2,     7073,
        3065,  3,     18252, 13437, 4,     9161,  15642, 5,     10714, 10153, 6,
        11585, 9078,  7,     5359,  9418,  8,     9024,  9515,  9,     1206,  16354,
        10,    14994, 1102,  11,    9375,  20796, 12,    15964, 6027,  13,    14789,
        6452,  14,    8002,  18591, 15,    14742, 14089, 16,    253,   3045,  17,
        1274,  19286, 18,    14777, 2044,  19,    13920, 9900,  20,    452,   7374,
        21,    18206, 9921,  22,    6131,  5414,  23,    10077, 9726,  24,    12045,
        5479,  25,    4322,  7990,  26,    15616, 5550,  27,    15561, 10661, 28,
        20718, 7387,  29,    2518,  18804, 30,    8984,  2600,  31,    6516,  17909,
        32,    11148, 98,    33,    20559, 3704,  34,    7510,  1569,  35,    16000,
        11692, 36,    9147,  10303, 37,    16650, 191,   38,    15577, 18685, 39,
        17167, 20917, 40,    4256,  3391,  41,    20092, 17219, 42,    9218,  5056,
        43,    18429, 8472,  44,    12093, 20753, 45,    16345, 12748, 46,    16023,
        11095, 47,    5048,  17595, 48,    18995, 4817,  49,    16483, 3536,  50,
        1439,  16148, 51,    3661,  3039,  52,    19010, 18121, 53,    8968,  11793,
        54,    13427, 18003, 55,    5303,  3083,  56,    531,   16668, 57,    4771,
        6722,  58,    5695,  7960,  59,    3589,  14630,
    };
};

struct DVB_S2_TABLE_B7 {
    static const int M = 360;
    static const int N = 64800;
    static const int K = 48600;
    static const int LINKS_MIN_CN = 13;
    static const int LINKS_MAX_CN = 14;
    static const int LINKS_TOTAL = 226799;
    static const int DEG_MAX = 12;
    static constexpr int DEG[] = { 12, 3, 0 };
    static constexpr int LEN[] = { 15, 120, 0 };
    static constexpr int POS[] = {
        0,  6385,  7901,  14611, 13389, 11200, 3252,  5243,  2504,  2722,  821,   7374,
        1,  11359, 2698,  357,   13824, 12772, 7244,  6752,  15310, 852,   2001,  11417,
        2,  7862,  7977,  6321,  13612, 12197, 14449, 15137, 13860, 1708,  6399,  13444,
        3,  1560,  11804, 6975,  13292, 3646,  3812,  8772,  7306,  5795,  14327, 7866,
        4,  7626,  11407, 14599, 9689,  1628,  2113,  10809, 9283,  1230,  15241, 4870,
        5,  1610,  5699,  15876, 9446,  12515, 1400,  6303,  5411,  14181, 13925, 7358,
        6,  4059,  8836,  3405,  7853,  7992,  15336, 5970,  10368, 10278, 9675,  4651,
        7,  4441,  3963,  9153,  2109,  12683, 7459,  12030, 12221, 629,   15212, 406,
        8,  6007,  8411,  5771,  3497,  543,   14202, 875,   9186,  6235,  13908, 3563,
        9,  3232,  6625,  4795,  546,   9781,  2071,  7312,  3399,  7250,  4932,  12652,
        10, 8820,  10088, 11090, 7069,  6585,  13134, 10158, 7183,  488,   7455,  9238,
        11, 1903,  10818, 119,   215,   7558,  11046, 10615, 11545, 14784, 7961,  15619,
        12, 3655,  8736,  4917,  15874, 5129,  2134,  15944, 14768, 7150,  2692,  1469,
        13, 8316,  3820,  505,   8923,  6757,  806,   7957,  4216,  15589, 13244, 2622,
        14, 14463, 4852,  15733, 3041,  11193, 12860, 13673, 8152,  6551,  15108, 8758,
        15, 3149,  11981, 16,    13416, 6906,  17,    13098, 13352, 18,    2009,  14460,
        19, 7207,  4314,  20,    3312,  3945,  21,    4418,  6248,  22,    2669,  13975,
        23, 7571,  9023,  24,    14172, 2967,  25,    7271,  7138,  26,    6135,  13670,
        27, 7490,  14559, 28,    8657,  2466,  29,    8599,  12834, 30,    3470,  3152,
        31, 13917, 4365,  32,    6024,  13730, 33,    10973, 14182, 34,    2464,  13167,
        35, 5281,  15049, 36,    1103,  1849,  37,    2058,  1069,  38,    9654,  6095,
        39, 14311, 7667,  40,    15617, 8146,  41,    4588,  11218, 42,    13660, 6243,
        43, 8578,  7874,  44,    11741, 2686,  0,     1022,  1264,  1,     12604, 9965,
        2,  8217,  2707,  3,     3156,  11793, 4,     354,   1514,  5,     6978,  14058,
        6,  7922,  16079, 7,     15087, 12138, 8,     5053,  6470,  9,     12687, 14932,
        10, 15458, 1763,  11,    8121,  1721,  12,    12431, 549,   13,    4129,  7091,
        14, 1426,  8415,  15,    9783,  7604,  16,    6295,  11329, 17,    1409,  12061,
        18, 8065,  9087,  19,    2918,  8438,  20,    1293,  14115, 21,    3922,  13851,
        22, 3851,  4000,  23,    5865,  1768,  24,    2655,  14957, 25,    5565,  6332,
        26, 4303,  12631, 27,    11653, 12236, 28,    16025, 7632,  29,    4655,  14128,
        30, 9584,  13123, 31,    13987, 9597,  32,    15409, 12110, 33,    8754,  15490,
        34, 7416,  15325, 35,    2909,  15549, 36,    2995,  8257,  37,    9406,  4791,
        38, 11111, 4854,  39,    2812,  8521,  40,    8476,  14717, 41,    7820,  15360,
        42, 1179,  7939,  43,    2357,  8678,  44,    7703,  6216,  0,     3477,  7067,
        1,  3931,  13845, 2,     7675,  12899, 3,     1754,  8187,  4,     7785,  1400,
        5,  9213,  5891,  6,     2494,  7703,  7,     2576,  7902,  8,     4821,  15682,
        9,  10426, 11935, 10,    1810,  904,   11,    11332, 9264,  12,    11312, 3570,
        13, 14916, 2650,  14,    7679,  7842,  15,    6089,  13084, 16,    3938,  2751,
        17, 8509,  4648,  18,    12204, 8917,  19,    5749,  12443, 20,    12613, 4431,
        21, 1344,  4014,  22,    8488,  13850, 23,    1730,  14896, 24,    14942, 7126,
        25, 14983, 8863,  26,    6578,  8564,  27,    4947,  396,   28,    297,   12805,
        29, 13878, 6692,  30,    11857, 11186, 31,    14395, 11493, 32,    16145, 12251,
        33, 13462, 7428,  34,    14526, 13119, 35,    2535,  11243, 36,    6465,  12690,
        37, 6872,  9334,  38,    15371, 14023, 39,    8101,  10187, 40,    11963, 4848,
        41, 15125, 6119,  42,    8051,  14465, 43,    11139, 5167,  44,    2883,  14521,
    };
};

struct DVB_S2_TABLE_B8 {
    static const int M = 360;
    static const int N = 64800;
    static const int K = 51840;
    static const int LINKS_MIN_CN = 17;
    static const int LINKS_MAX_CN = 18;
    static const int LINKS_TOTAL = 233279;
    static const int DEG_MAX = 11;
    static constexpr int DEG[] = { 11, 3, 0 };
    static constexpr int LEN[] = { 18, 126, 0 };
    static constexpr int POS[] = {
        0,     149,   11212, 5575,  6360,  12559, 8108, 8505,  408,   10026, 12828, 1,
        5237,  490,   10677, 4998,  3869,  3734,  3092, 3509,  7703,  10305, 2,     8742,
        5553,  2820,  7085,  12116, 10485, 564,   7795, 2972,  2157,  3,     2699,  4304,
        8350,  712,   2841,  3250,  4731,  10105, 517,  7516,  4,     12067, 1351,  11992,
        12191, 11267, 5161,  537,   6166,  4246,  2363, 5,     6828,  7107,  2127,  3724,
        5743,  11040, 10756, 4073,  1011,  3422,  6,    11259, 1216,  9526,  1466,  10816,
        940,   3744,  2815,  11506, 11573, 7,     4549, 11507, 1118,  1274,  11751, 5207,
        7854,  12803, 4047,  6484,  8,     8430,  4115, 9440,  413,   4455,  2262,  7915,
        12402, 8579,  7052,  9,     3885,  9126,  5665, 4505,  2343,  253,   4707,  3742,
        4166,  1556,  10,    1704,  8936,  6775,  8639, 8179,  7954,  8234,  7850,  8883,
        8713,  11,    11716, 4344,  9087,  11264, 2274, 8832,  9147,  11930, 6054,  5455,
        12,    7323,  3970,  10329, 2170,  8262,  3854, 2087,  12899, 9497,  11700, 13,
        4418,  1467,  2490,  5841,  817,   11453, 533,  11217, 11962, 5251,  14,    1541,
        4525,  7976,  3457,  9536,  7725,  3788,  2982, 6307,  5997,  15,    11484, 2739,
        4023,  12107, 6516,  551,   2572,  6628,  8150, 9852,  16,    6070,  1761,  4627,
        6534,  7913,  3730,  11866, 1813,  12306, 8249, 17,    12441, 5489,  8748,  7837,
        7660,  2102,  11341, 2936,  6712,  11977, 18,   10155, 4210,  19,    1010,  10483,
        20,    8900,  10250, 21,    10243, 12278, 22,   7070,  4397,  23,    12271, 3887,
        24,    11980, 6836,  25,    9514,  4356,  26,   7137,  10281, 27,    11881, 2526,
        28,    1969,  11477, 29,    3044,  10921, 30,   2236,  8724,  31,    9104,  6340,
        32,    7342,  8582,  33,    11675, 10405, 34,   6467,  12775, 35,    3186,  12198,
        0,     9621,  11445, 1,     7486,  5611,  2,    4319,  4879,  3,     2196,  344,
        4,     7527,  6650,  5,     10693, 2440,  6,    6755,  2706,  7,     5144,  5998,
        8,     11043, 8033,  9,     4846,  4435,  10,   4157,  9228,  11,    12270, 6562,
        12,    11954, 7592,  13,    7420,  2592,  14,   8810,  9636,  15,    689,   5430,
        16,    920,   1304,  17,    1253,  11934, 18,   9559,  6016,  19,    312,   7589,
        20,    4439,  4197,  21,    4002,  9555,  22,   12232, 7779,  23,    1494,  8782,
        24,    10749, 3969,  25,    4368,  3479,  26,   6316,  5342,  27,    2455,  3493,
        28,    12157, 7405,  29,    6598,  11495, 30,   11805, 4455,  31,    9625,  2090,
        32,    4731,  2321,  33,    3578,  2608,  34,   8504,  1849,  35,    4027,  1151,
        0,     5647,  4935,  1,     4219,  1870,  2,    10968, 8054,  3,     6970,  5447,
        4,     3217,  5638,  5,     8972,  669,   6,    5618,  12472, 7,     1457,  1280,
        8,     8868,  3883,  9,     8866,  1224,  10,   8371,  5972,  11,    266,   4405,
        12,    3706,  3244,  13,    6039,  5844,  14,   7200,  3283,  15,    1502,  11282,
        16,    12318, 2202,  17,    4523,  965,   18,   9587,  7011,  19,    2552,  2051,
        20,    12045, 10306, 21,    11070, 5104,  22,   6627,  6906,  23,    9889,  2121,
        24,    829,   9701,  25,    2201,  1819,  26,   6689,  12925, 27,    2139,  8757,
        28,    12004, 5948,  29,    8704,  3191,  30,   8171,  10933, 31,    6297,  7116,
        32,    616,   7146,  33,    5142,  9761,  34,   10377, 8138,  35,    7616,  5811,
        0,     7285,  9863,  1,     7764,  10867, 2,    12343, 9019,  3,     4414,  8331,
        4,     3464,  642,   5,     6960,  2039,  6,    786,   3021,  7,     710,   2086,
        8,     7423,  5601,  9,     8120,  4885,  10,   12385, 11990, 11,    9739,  10034,
        12,    424,   10162, 13,    1347,  7597,  14,   1450,  112,   15,    7965,  8478,
        16,    8945,  7397,  17,    6590,  8316,  18,   6838,  9011,  19,    6174,  9410,
        20,    255,   113,   21,    6197,  5835,  22,   12902, 3844,  23,    4377,  3505,
        24,    5478,  8672,  25,    4453,  2132,  26,   9724,  1380,  27,    12131, 11526,
        28,    12323, 9511,  29,    8231,  1752,  30,   497,   9022,  31,    9288,  3080,
        32,    2481,  7515,  33,    2696,  268,   34,   4023,  12341, 35,    7108,  5553,
    };
};

struct DVB_S2_TABLE_B9 {
    static const int M = 360;
    static const int N = 64800;
    static const int K = 54000;
    static const int LINKS_MIN_CN = 21;
    static const int LINKS_MAX_CN = 22;
    static const int LINKS_TOTAL = 237599;
    static const int DEG_MAX = 13;
    static constexpr int DEG[] = { 13, 3, 0 };
    static constexpr int LEN[] = { 15, 135, 0 };
    static constexpr int POS[] = {
        0,     4362,  416,   8909,  4156,  3216,  3112,  2560,  2912,  6405,  8593,
        4969,  6723,  1,     2479,  1786,  8978,  3011,  4339,  9313,  6397,  2957,
        7288,  5484,  6031,  10217, 2,     10175, 9009,  9889,  3091,  4985,  7267,
        4092,  8874,  5671,  2777,  2189,  8716,  3,     9052,  4795,  3924,  3370,
        10058, 1128,  9996,  10165, 9360,  4297,  434,   5138,  4,     2379,  7834,
        4835,  2327,  9843,  804,   329,   8353,  7167,  3070,  1528,  7311,  5,
        3435,  7871,  348,   3693,  1876,  6585,  10340, 7144,  5870,  2084,  4052,
        2780,  6,     3917,  3111,  3476,  1304,  10331, 5939,  5199,  1611,  1991,
        699,   8316,  9960,  7,     6883,  3237,  1717,  10752, 7891,  9764,  4745,
        3888,  10009, 4176,  4614,  1567,  8,     10587, 2195,  1689,  2968,  5420,
        2580,  2883,  6496,  111,   6023,  1024,  4449,  9,     3786,  8593,  2074,
        3321,  5057,  1450,  3840,  5444,  6572,  3094,  9892,  1512,  10,    8548,
        1848,  10372, 4585,  7313,  6536,  6379,  1766,  9462,  2456,  5606,  9975,
        11,    8204,  10593, 7935,  3636,  3882,  394,   5968,  8561,  2395,  7289,
        9267,  9978,  12,    7795,  74,    1633,  9542,  6867,  7352,  6417,  7568,
        10623, 725,   2531,  9115,  13,    7151,  2482,  4260,  5003,  10105, 7419,
        9203,  6691,  8798,  2092,  8263,  3755,  14,    3600,  570,   4527,  200,
        9718,  6771,  1995,  8902,  5446,  768,   1103,  6520,  15,    6304,  7621,
        16,    6498,  9209,  17,    7293,  6786,  18,    5950,  1708,  19,    8521,
        1793,  20,    6174,  7854,  21,    9773,  1190,  22,    9517,  10268, 23,
        2181,  9349,  24,    1949,  5560,  25,    1556,  555,   26,    8600,  3827,
        27,    5072,  1057,  28,    7928,  3542,  29,    3226,  3762,  0,     7045,
        2420,  1,     9645,  2641,  2,     2774,  2452,  3,     5331,  2031,  4,
        9400,  7503,  5,     1850,  2338,  6,     10456, 9774,  7,     1692,  9276,
        8,     10037, 4038,  9,     3964,  338,   10,    2640,  5087,  11,    858,
        3473,  12,    5582,  5683,  13,    9523,  916,   14,    4107,  1559,  15,
        4506,  3491,  16,    8191,  4182,  17,    10192, 6157,  18,    5668,  3305,
        19,    3449,  1540,  20,    4766,  2697,  21,    4069,  6675,  22,    1117,
        1016,  23,    5619,  3085,  24,    8483,  8400,  25,    8255,  394,   26,
        6338,  5042,  27,    6174,  5119,  28,    7203,  1989,  29,    1781,  5174,
        0,     1464,  3559,  1,     3376,  4214,  2,     7238,  67,    3,     10595,
        8831,  4,     1221,  6513,  5,     5300,  4652,  6,     1429,  9749,  7,
        7878,  5131,  8,     4435,  10284, 9,     6331,  5507,  10,    6662,  4941,
        11,    9614,  10238, 12,    8400,  8025,  13,    9156,  5630,  14,    7067,
        8878,  15,    9027,  3415,  16,    1690,  3866,  17,    2854,  8469,  18,
        6206,  630,   19,    363,   5453,  20,    4125,  7008,  21,    1612,  6702,
        22,    9069,  9226,  23,    5767,  4060,  24,    3743,  9237,  25,    7018,
        5572,  26,    8892,  4536,  27,    853,   6064,  28,    8069,  5893,  29,
        2051,  2885,  0,     10691, 3153,  1,     3602,  4055,  2,     328,   1717,
        3,     2219,  9299,  4,     1939,  7898,  5,     617,   206,   6,     8544,
        1374,  7,     10676, 3240,  8,     6672,  9489,  9,     3170,  7457,  10,
        7868,  5731,  11,    6121,  10732, 12,    4843,  9132,  13,    580,   9591,
        14,    6267,  9290,  15,    3009,  2268,  16,    195,   2419,  17,    8016,
        1557,  18,    1516,  9195,  19,    8062,  9064,  20,    2095,  8968,  21,
        753,   7326,  22,    6291,  3833,  23,    2614,  7844,  24,    2303,  646,
        25,    2075,  611,   26,    4687,  362,   27,    8684,  9940,  28,    4830,
        2065,  29,    7038,  1363,  0,     1769,  7837,  1,     3801,  1689,  2,
        10070, 2359,  3,     3667,  9918,  4,     1914,  6920,  5,     4244,  5669,
        6,     10245, 7821,  7,     7648,  3944,  8,     3310,  5488,  9,     6346,
        9666,  10,    7088,  6122,  11,    1291,  7827,  12,    10592, 8945,  13,
        3609,  7120,  14,    9168,  9112,  15,    6203,  8052,  16,    3330,  2895,
        17,    4264,  10563, 18,    10556, 6496,  19,    8807,  7645,  20,    1999,
        4530,  21,    9202,  6818,  22,    3403,  1734,  23,    2106,  9023,  24,
        6881,  3883,  25,    3895,  2171,  26,    4062,  6424,  27,    3755,  9536,
        28,    4683,  2131,  29,    7347,  8027,
    };
};

struct DVB_S2_TABLE_B10 {
    static const int M = 360;
    static const int N = 64800;
    static const int K = 57600;
    static const int LINKS_MIN_CN = 26;
    static const int LINKS_MAX_CN = 27;
    static const int LINKS_TOTAL = 194399;
    static const int DEG_MAX = 4;
    static constexpr int DEG[] = { 4, 3, 0 };
    static constexpr int LEN[] = { 20, 140, 0 };
    static constexpr int POS[] = {
        0,    6235, 2848, 3222, 1,    5800, 3492, 5348, 2,    2757, 927,  90,   3,
        6961, 4516, 4739, 4,    1172, 3237, 6264, 5,    1927, 2425, 3683, 6,    3714,
        6309, 2495, 7,    3070, 6342, 7154, 8,    2428, 613,  3761, 9,    2906, 264,
        5927, 10,   1716, 1950, 4273, 11,   4613, 6179, 3491, 12,   4865, 3286, 6005,
        13,   1343, 5923, 3529, 14,   4589, 4035, 2132, 15,   1579, 3920, 6737, 16,
        1644, 1191, 5998, 17,   1482, 2381, 4620, 18,   6791, 6014, 6596, 19,   2738,
        5918, 3786, 0,    5156, 6166, 1,    1504, 4356, 2,    130,  1904, 3,    6027,
        3187, 4,    6718, 759,  5,    6240, 2870, 6,    2343, 1311, 7,    1039, 5465,
        8,    6617, 2513, 9,    1588, 5222, 10,   6561, 535,  11,   4765, 2054, 12,
        5966, 6892, 13,   1969, 3869, 14,   3571, 2420, 15,   4632, 981,  16,   3215,
        4163, 17,   973,  3117, 18,   3802, 6198, 19,   3794, 3948, 0,    3196, 6126,
        1,    573,  1909, 2,    850,  4034, 3,    5622, 1601, 4,    6005, 524,  5,
        5251, 5783, 6,    172,  2032, 7,    1875, 2475, 8,    497,  1291, 9,    2566,
        3430, 10,   1249, 740,  11,   2944, 1948, 12,   6528, 2899, 13,   2243, 3616,
        14,   867,  3733, 15,   1374, 4702, 16,   4698, 2285, 17,   4760, 3917, 18,
        1859, 4058, 19,   6141, 3527, 0,    2148, 5066, 1,    1306, 145,  2,    2319,
        871,  3,    3463, 1061, 4,    5554, 6647, 5,    5837, 339,  6,    5821, 4932,
        7,    6356, 4756, 8,    3930, 418,  9,    211,  3094, 10,   1007, 4928, 11,
        3584, 1235, 12,   6982, 2869, 13,   1612, 1013, 14,   953,  4964, 15,   4555,
        4410, 16,   4925, 4842, 17,   5778, 600,  18,   6509, 2417, 19,   1260, 4903,
        0,    3369, 3031, 1,    3557, 3224, 2,    3028, 583,  3,    3258, 440,  4,
        6226, 6655, 5,    4895, 1094, 6,    1481, 6847, 7,    4433, 1932, 8,    2107,
        1649, 9,    2119, 2065, 10,   4003, 6388, 11,   6720, 3622, 12,   3694, 4521,
        13,   1164, 7050, 14,   1965, 3613, 15,   4331, 66,   16,   2970, 1796, 17,
        4652, 3218, 18,   1762, 4777, 19,   5736, 1399, 0,    970,  2572, 1,    2062,
        6599, 2,    4597, 4870, 3,    1228, 6913, 4,    4159, 1037, 5,    2916, 2362,
        6,    395,  1226, 7,    6911, 4548, 8,    4618, 2241, 9,    4120, 4280, 10,
        5825, 474,  11,   2154, 5558, 12,   3793, 5471, 13,   5707, 1595, 14,   1403,
        325,  15,   6601, 5183, 16,   6369, 4569, 17,   4846, 896,  18,   7092, 6184,
        19,   6764, 7127, 0,    6358, 1951, 1,    3117, 6960, 2,    2710, 7062, 3,
        1133, 3604, 4,    3694, 657,  5,    1355, 110,  6,    3329, 6736, 7,    2505,
        3407, 8,    2462, 4806, 9,    4216, 214,  10,   5348, 5619, 11,   6627, 6243,
        12,   2644, 5073, 13,   4212, 5088, 14,   3463, 3889, 15,   5306, 478,  16,
        4320, 6121, 17,   3961, 1125, 18,   5699, 1195, 19,   6511, 792,  0,    3934,
        2778, 1,    3238, 6587, 2,    1111, 6596, 3,    1457, 6226, 4,    1446, 3885,
        5,    3907, 4043, 6,    6839, 2873, 7,    1733, 5615, 8,    5202, 4269, 9,
        3024, 4722, 10,   5445, 6372, 11,   370,  1828, 12,   4695, 1600, 13,   680,
        2074, 14,   1801, 6690, 15,   2669, 1377, 16,   2463, 1681, 17,   5972, 5171,
        18,   5728, 4284, 19,   1696, 1459,
    };
};

struct DVB_S2_TABLE_B11 {
    static const int M = 360;
    static const int N = 64800;
    static const int K = 58320;
    static const int LINKS_MIN_CN = 29;
    static const int LINKS_MAX_CN = 30;
    static const int LINKS_TOTAL = 194399;
    static const int DEG_MAX = 4;
    static constexpr int DEG[] = { 4, 3, 0 };
    static constexpr int LEN[] = { 18, 144, 0 };
    static constexpr int POS[] = {
        0,    5611, 2563, 2900, 1,    5220, 3143, 4813, 2,    2481, 834,  81,   3,
        6265, 4064, 4265, 4,    1055, 2914, 5638, 5,    1734, 2182, 3315, 6,    3342,
        5678, 2246, 7,    2185, 552,  3385, 8,    2615, 236,  5334, 9,    1546, 1755,
        3846, 10,   4154, 5561, 3142, 11,   4382, 2957, 5400, 12,   1209, 5329, 3179,
        13,   1421, 3528, 6063, 14,   1480, 1072, 5398, 15,   3843, 1777, 4369, 16,
        1334, 2145, 4163, 17,   2368, 5055, 260,  0,    6118, 5405, 1,    2994, 4370,
        2,    3405, 1669, 3,    4640, 5550, 4,    1354, 3921, 5,    117,  1713, 6,
        5425, 2866, 7,    6047, 683,  8,    5616, 2582, 9,    2108, 1179, 10,   933,
        4921, 11,   5953, 2261, 12,   1430, 4699, 13,   5905, 480,  14,   4289, 1846,
        15,   5374, 6208, 16,   1775, 3476, 17,   3216, 2178, 0,    4165, 884,  1,
        2896, 3744, 2,    874,  2801, 3,    3423, 5579, 4,    3404, 3552, 5,    2876,
        5515, 6,    516,  1719, 7,    765,  3631, 8,    5059, 1441, 9,    5629, 598,
        10,   5405, 473,  11,   4724, 5210, 12,   155,  1832, 13,   1689, 2229, 14,
        449,  1164, 15,   2308, 3088, 16,   1122, 669,  17,   2268, 5758, 0,    5878,
        2609, 1,    782,  3359, 2,    1231, 4231, 3,    4225, 2052, 4,    4286, 3517,
        5,    5531, 3184, 6,    1935, 4560, 7,    1174, 131,  8,    3115, 956,  9,
        3129, 1088, 10,   5238, 4440, 11,   5722, 4280, 12,   3540, 375,  13,   191,
        2782, 14,   906,  4432, 15,   3225, 1111, 16,   6296, 2583, 17,   1457, 903,
        0,    855,  4475, 1,    4097, 3970, 2,    4433, 4361, 3,    5198, 541,  4,
        1146, 4426, 5,    3202, 2902, 6,    2724, 525,  7,    1083, 4124, 8,    2326,
        6003, 9,    5605, 5990, 10,   4376, 1579, 11,   4407, 984,  12,   1332, 6163,
        13,   5359, 3975, 14,   1907, 1854, 15,   3601, 5748, 16,   6056, 3266, 17,
        3322, 4085, 0,    1768, 3244, 1,    2149, 144,  2,    1589, 4291, 3,    5154,
        1252, 4,    1855, 5939, 5,    4820, 2706, 6,    1475, 3360, 7,    4266, 693,
        8,    4156, 2018, 9,    2103, 752,  10,   3710, 3853, 11,   5123, 931,  12,
        6146, 3323, 13,   1939, 5002, 14,   5140, 1437, 15,   1263, 293,  16,   5949,
        4665, 17,   4548, 6380, 0,    3171, 4690, 1,    5204, 2114, 2,    6384, 5565,
        3,    5722, 1757, 4,    2805, 6264, 5,    1202, 2616, 6,    1018, 3244, 7,
        4018, 5289, 8,    2257, 3067, 9,    2483, 3073, 10,   1196, 5329, 11,   649,
        3918, 12,   3791, 4581, 13,   5028, 3803, 14,   3119, 3506, 15,   4779, 431,
        16,   3888, 5510, 17,   4387, 4084, 0,    5836, 1692, 1,    5126, 1078, 2,
        5721, 6165, 3,    3540, 2499, 4,    2225, 6348, 5,    1044, 1484, 6,    6323,
        4042, 7,    1313, 5603, 8,    1303, 3496, 9,    3516, 3639, 10,   5161, 2293,
        11,   4682, 3845, 12,   3045, 643,  13,   2818, 2616, 14,   3267, 649,  15,
        6236, 593,  16,   646,  2948, 17,   4213, 1442, 0,    5779, 1596, 1,    2403,
        1237, 2,    2217, 1514, 3,    5609, 716,  4,    5155, 3858, 5,    1517, 1312,
        6,    2554, 3158, 7,    5280, 2643, 8,    4990, 1353, 9,    5648, 1170, 10,
        1152, 4366, 11,   3561, 5368, 12,   3581, 1411, 13,   5647, 4661, 14,   1542,
        5401, 15,   5078, 2687, 16,   316,  1755, 17,   3392, 1991,
    };
};

struct DVB_S2_TABLE_C1 {
    static const int M = 360;
    static const int N = 16200;
    static const int K = 3240;
    static const int LINKS_MIN_CN = 3;
    static const int LINKS_MAX_CN = 4;
    static const int LINKS_TOTAL = 48599;
    static const int DEG_MAX = 12;
    static constexpr int DEG[] = { 12, 3, 0 };
    static constexpr int LEN[] = { 4, 5, 0 };
    static constexpr int POS[] = {
        6295,  9626,  304,   7695,  4839, 4936,  1660,  144,  11203, 5567, 6347,
        12557, 10691, 4988,  3859,  3734, 3071,  3494,  7687, 10313, 5964, 8069,
        8296,  11090, 10774, 3613,  5208, 11177, 7676,  3549, 8746,  6583, 7239,
        12265, 2674,  4292,  11869, 3708, 5981,  8718,  4908, 10650, 6805, 3334,
        2627,  10461, 9285,  11120, 7844, 3079,  10773, 3385, 10854, 5747, 1360,
        12010, 12202, 6189,  4241,  2343, 9840,  12726, 4977,
    };
};

struct DVB_S2_TABLE_C2 {
    static const int M = 360;
    static const int N = 16200;
    static const int K = 5400;
    static const int LINKS_MIN_CN = 4;
    static const int LINKS_MAX_CN = 5;
    static const int LINKS_TOTAL = 53999;
    static const int DEG_MAX = 12;
    static constexpr int DEG[] = { 12, 3, 0 };
    static constexpr int LEN[] = { 5, 10, 0 };
    static constexpr int POS[] = {
        416,  8909,  4156,  3216,  3112,  2560, 2912, 6405, 8593, 4969,  6723,  6912,
        8978, 3011,  4339,  9312,  6396,  2957, 7288, 5485, 6031, 10218, 2226,  3575,
        3383, 10059, 1114,  10008, 10147, 9384, 4290, 434,  5139, 3536,  1965,  2291,
        2797, 3693,  7615,  7077,  743,   1941, 8716, 6215, 3840, 5140,  4582,  5420,
        6110, 8551,  1515,  7404,  4879,  4946, 5383, 1831, 3441, 9569,  10472, 4306,
        1505, 5682,  7778,  7172,  6830,  6623, 7281, 3941, 3505, 10270, 8669,  914,
        3622, 7563,  9388,  9930,  5058,  4554, 4844, 9609, 2707, 6883,  3237,  1714,
        4768, 3878,  10017, 10127, 3334,  8267,
    };
};

struct DVB_S2_TABLE_C3 {
    static const int M = 360;
    static const int N = 16200;
    static const int K = 6480;
    static const int LINKS_MIN_CN = 5;
    static const int LINKS_MAX_CN = 6;
    static const int LINKS_TOTAL = 58319;
    static const int DEG_MAX = 12;
    static constexpr int DEG[] = { 12, 3, 0 };
    static constexpr int LEN[] = { 6, 12, 0 };
    static constexpr int POS[] = {
        5650, 4143, 8750, 583,  6720, 8071, 635,  1767, 1344, 6922, 738,  6658,
        5696, 1685, 3207, 415,  7019, 5023, 5608, 2605, 857,  6915, 1770, 8016,
        3992, 771,  2190, 7258, 8970, 7792, 1802, 1866, 6137, 8841, 886,  1931,
        4108, 3781, 7577, 6810, 9322, 8226, 5396, 5867, 4428, 8827, 7766, 2254,
        4247, 888,  4367, 8821, 9660, 324,  5864, 4774, 227,  7889, 6405, 8963,
        9693, 500,  2520, 2227, 1811, 9330, 1928, 5140, 4030, 4824, 806,  3134,
        1652, 8171, 1435, 3366, 6543, 3745, 9286, 8509, 4645, 7397, 5790, 8972,
        6597, 4422, 1799, 9276, 4041, 3847, 8683, 7378, 4946, 5348, 1993, 9186,
        6724, 9015, 5646, 4502, 4439, 8474, 5107, 7342, 9442, 1387, 8910, 2660,
    };
};

struct DVB_S2_TABLE_C4 {
    static const int M = 360;
    static const int N = 16200;
    static const int K = 7200;
    static const int LINKS_MIN_CN = 4;
    static const int LINKS_MAX_CN = 7;
    static const int LINKS_TOTAL = 48599;
    static const int DEG_MAX = 8;
    static constexpr int DEG[] = { 8, 3, 0 };
    static constexpr int LEN[] = { 5, 15, 0 };
    static constexpr int POS[] = {
        20,   712,  2386, 6354, 4061, 1062, 5045, 5158, 21,   2543, 5748, 4822, 2348,
        3089, 6328, 5876, 22,   926,  5701, 269,  3693, 2438, 3190, 3507, 23,   2802,
        4520, 3577, 5324, 1091, 4667, 4449, 24,   5140, 2003, 1263, 4742, 6497, 1185,
        6202, 0,    4046, 6934, 1,    2855, 66,   2,    6694, 212,  3,    3439, 1158,
        4,    3850, 4422, 5,    5924, 290,  6,    1467, 4049, 7,    7820, 2242, 8,
        4606, 3080, 9,    4633, 7877, 10,   3884, 6868, 11,   8935, 4996, 12,   3028,
        764,  13,   5988, 1057, 14,   7411, 3450,
    };
};

struct DVB_S2_TABLE_C5 {
    static const int M = 360;
    static const int N = 16200;
    static const int K = 9720;
    static const int LINKS_MIN_CN = 10;
    static const int LINKS_MAX_CN = 11;
    static const int LINKS_TOTAL = 71279;
    static const int DEG_MAX = 12;
    static constexpr int DEG[] = { 12, 3, 0 };
    static constexpr int LEN[] = { 9, 18, 0 };
    static constexpr int POS[] = {
        2765, 5713, 6426, 3596, 1374, 4811, 2182, 544,  3394, 2840, 4310, 771,  4951,
        211,  2208, 723,  1246, 2928, 398,  5739, 265,  5601, 5993, 2615, 210,  4730,
        5777, 3096, 4282, 6238, 4939, 1119, 6463, 5298, 6320, 4016, 4167, 2063, 4757,
        3157, 5664, 3956, 6045, 563,  4284, 2441, 3412, 6334, 4201, 2428, 4474, 59,
        1721, 736,  2997, 428,  3807, 1513, 4732, 6195, 2670, 3081, 5139, 3736, 1999,
        5889, 4362, 3806, 4534, 5409, 6384, 5809, 5516, 1622, 2906, 3285, 1257, 5797,
        3816, 817,  875,  2311, 3543, 1205, 4244, 2184, 5415, 1705, 5642, 4886, 2333,
        287,  1848, 1121, 3595, 6022, 2142, 2830, 4069, 5654, 1295, 2951, 3919, 1356,
        884,  1786, 396,  4738, 0,    2161, 2653, 1,    1380, 1461, 2,    2502, 3707,
        3,    3971, 1057, 4,    5985, 6062, 5,    1733, 6028, 6,    3786, 1936, 7,
        4292, 956,  8,    5692, 3417, 9,    266,  4878, 10,   4913, 3247, 11,   4763,
        3937, 12,   3590, 2903, 13,   2566, 4215, 14,   5208, 4707, 15,   3940, 3388,
        16,   5109, 4556, 17,   4908, 4177,
    };
};

struct DVB_S2_TABLE_C6 {
    static const int M = 360;
    static const int N = 16200;
    static const int K = 10800;
    static const int LINKS_MIN_CN = 9;
    static const int LINKS_MAX_CN = 10;
    static const int LINKS_TOTAL = 53999;
    static const int DEG_MAX = 13;
    static constexpr int DEG[] = { 13, 3, 0 };
    static constexpr int LEN[] = { 3, 27, 0 };
    static constexpr int POS[] = {
        0,    2084, 1613, 1548, 1286, 1460, 3196, 4297, 2481, 3369, 3451, 4620,
        2622, 1,    122,  1516, 3448, 2880, 1407, 1847, 3799, 3529, 373,  971,
        4358, 3108, 2,    259,  3399, 929,  2650, 864,  3996, 3833, 107,  5287,
        164,  3125, 2350, 3,    342,  3529, 4,    4198, 2147, 5,    1880, 4836,
        6,    3864, 4910, 7,    243,  1542, 8,    3011, 1436, 9,    2167, 2512,
        10,   4606, 1003, 11,   2835, 705,  12,   3426, 2365, 13,   3848, 2474,
        14,   1360, 1743, 0,    163,  2536, 1,    2583, 1180, 2,    1542, 509,
        3,    4418, 1005, 4,    5212, 5117, 5,    2155, 2922, 6,    347,  2696,
        7,    226,  4296, 8,    1560, 487,  9,    3926, 1640, 10,   149,  2928,
        11,   2364, 563,  12,   635,  688,  13,   231,  1684, 14,   1129, 3894,
    };
};

struct DVB_S2_TABLE_C7 {
    static const int M = 360;
    static const int N = 16200;
    static const int K = 11880;
    static const int LINKS_MIN_CN = 9;
    static const int LINKS_MAX_CN = 13;
    static const int LINKS_TOTAL = 47519;
    static const int DEG_MAX = 12;
    static constexpr int DEG[] = { 12, 3, 0 };
    static constexpr int LEN[] = { 1, 32, 0 };
    static constexpr int POS[] = {
        3, 3198, 478,  4207, 1481, 1009, 2616, 1924, 3437, 554, 683,  1801,
        4, 2681, 2135, 5,    3107, 4027, 6,    2637, 3373, 7,   3830, 3449,
        8, 4129, 2060, 9,    4184, 2742, 10,   3946, 1070, 11,  2239, 984,
        0, 1458, 3031, 1,    3003, 1328, 2,    1137, 1716, 3,   132,  3725,
        4, 1817, 638,  5,    1774, 3447, 6,    3632, 1257, 7,   542,  3694,
        8, 1015, 1945, 9,    1948, 412,  10,   995,  2238, 11,  4141, 1907,
        0, 2480, 3079, 1,    3021, 1088, 2,    713,  1379, 3,   997,  3903,
        4, 2323, 3361, 5,    1110, 986,  6,    2532, 142,  7,   1690, 2405,
        8, 1298, 1881, 9,    615,  174,  10,   1648, 3112, 11,  1415, 2808,
    };
};

struct DVB_S2_TABLE_C8 {
    static const int M = 360;
    static const int N = 16200;
    static const int K = 12600;
    static const int LINKS_MIN_CN = 11;
    static const int LINKS_MAX_CN = 13;
    static const int LINKS_TOTAL = 44999;
    static const int DEG_MAX = 3;
    static constexpr int DEG[] = { 3, 0 };
    static constexpr int LEN[] = { 35, 0 };
    static constexpr int POS[] = {
        5, 896,  1565, 6, 2493, 184,  7, 212,  3210, 8, 727,  1339, 9, 3428, 612,
        0, 2663, 1947, 1, 230,  2695, 2, 2025, 2794, 3, 3039, 283,  4, 862,  2889,
        5, 376,  2110, 6, 2034, 2286, 7, 951,  2068, 8, 3108, 3542, 9, 307,  1421,
        0, 2272, 1197, 1, 1800, 3280, 2, 331,  2308, 3, 465,  2552, 4, 1038, 2479,
        5, 1383, 343,  6, 94,   236,  7, 2619, 121,  8, 1497, 2774, 9, 2116, 1855,
        0, 722,  1584, 1, 2767, 1881, 2, 2701, 1610, 3, 3283, 1732, 4, 168,  1099,
        5, 3074, 243,  6, 3460, 945,  7, 2049, 1746, 8, 566,  1427, 9, 3545, 1168,
    };
};

struct DVB_S2_TABLE_C9 {
    static const int M = 360;
    static const int N = 16200;
    static const int K = 13320;
    static const int LINKS_MIN_CN = 15;
    static const int LINKS_MAX_CN = 19;
    static const int LINKS_TOTAL = 49319;
    static const int DEG_MAX = 13;
    static constexpr int DEG[] = { 13, 3, 0 };
    static constexpr int LEN[] = { 1, 36, 0 };
    static constexpr int POS[] = {
        3,    2409, 499,  1481, 908,  559,  716,  1270, 333,  2508, 2264, 1702, 2805,
        4,    2447, 1926, 5,    414,  1224, 6,    2114, 842,  7,    212,  573,  0,
        2383, 2112, 1,    2286, 2348, 2,    545,  819,  3,    1264, 143,  4,    1701,
        2258, 5,    964,  166,  6,    114,  2413, 7,    2243, 81,   0,    1245, 1581,
        1,    775,  169,  2,    1696, 1104, 3,    1914, 2831, 4,    532,  1450, 5,
        91,   974,  6,    497,  2228, 7,    2326, 1579, 0,    2482, 256,  1,    1117,
        1261, 2,    1257, 1658, 3,    1478, 1225, 4,    2511, 980,  5,    2320, 2675,
        6,    435,  1278, 7,    228,  503,  0,    1885, 2369, 1,    57,   483,  2,
        838,  1050, 3,    1231, 1990, 4,    1738, 68,   5,    2392, 951,  6,    163,
        645,  7,    2644, 1704,
    };
};

struct DVB_S2_TABLE_C10 {
    static const int M = 360;
    static const int N = 16200;
    static const int K = 14400;
    static const int LINKS_MIN_CN = 26;
    static const int LINKS_MAX_CN = 27;
    static const int LINKS_TOTAL = 48599;
    static const int DEG_MAX = 4;
    static constexpr int DEG[] = { 4, 3, 0 };
    static constexpr int LEN[] = { 5, 35, 0 };
    static constexpr int POS[] = {
        0,    1558, 712,  805,  1,    1450, 873,  1337, 2,    1741, 1129, 1184, 3,    294,
        806,  1566, 4,    482,  605,  923,  0,    926,  1578, 1,    777,  1374, 2,    608,
        151,  3,    1195, 210,  4,    1484, 692,  0,    427,  488,  1,    828,  1124, 2,
        874,  1366, 3,    1500, 835,  4,    1496, 502,  0,    1006, 1701, 1,    1155, 97,
        2,    657,  1403, 3,    1453, 624,  4,    429,  1495, 0,    809,  385,  1,    367,
        151,  2,    1323, 202,  3,    960,  318,  4,    1451, 1039, 0,    1098, 1722, 1,
        1015, 1428, 2,    1261, 1564, 3,    544,  1190, 4,    1472, 1246, 0,    508,  630,
        1,    421,  1704, 2,    284,  898,  3,    392,  577,  4,    1155, 556,  0,    631,
        1000, 1,    732,  1368, 2,    1328, 329,  3,    1515, 506,  4,    1104, 1172,
    };
};

#endif
